package com.wmx.rocketmq.helloWorld;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 单向模式发送消息 - sendOneway 方法没有返回值，单向传输用于需要中等可靠性的情况，例如日志收集。
 *
 * @author wangMaoXiong
 * @version 1.0
 * @date 2020/11/2 19:56
 */
public class OnewayProducer {
    public static void main(String[] args) throws Exception {
        //声明并初始化一个 producer 生产者，同时指定 Producer Group 生产者组名称
        DefaultMQProducer producer = new DefaultMQProducer("rocketMQ-helloWorld-onewayProducerGroup");

        //1、指定 Producer 连接的 nameServer 服务器所在地址以及端口
        //2、如果是分布式部署的多个，则用分号隔开，如：setNamesrvAddr("172.16.235.77:9876;172.16.235.78:9876");
        producer.setNamesrvAddr("192.168.116.128:9876");

        //Producer 对象在使用之前必须要调用 start 进行启动初始化，初始化一次即可，切忌不可每次发送消息时，都调用 start 方法
        producer.start();

        for (int i = 0; i < 10; i++) {
            //创建一个消息实例，指定主题、标记和消息体。主题、标签等等全部自定义即可
            Message msg = new Message("TopicTest", "TagA",
                    ("单向发送，不需要确认 " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            //发送单向消息，没有任何返回结果，将消息传递给代理，因为是单向发送，所以方法没有返回值
            producer.sendOneway(msg);
            System.out.println("【" + Thread.currentThread().getName() + "】发送消息 " + i);
        }
        //应用退出时，调用 shutdown 关闭网络连接，清理资源，从 RocketMQ 服务器上注销自己
        //建议应用在 JBOSS、Tomcat 等容器的退出钩子里调用 shutdown 方法
        producer.shutdown();
        System.out.printf("Producer shutdown.%n");
    }
}
